/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author lomanda
 */
@Entity
@Table(name = "funcionario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Funcionario.findAll", query = "SELECT f FROM Funcionario f"),
    @NamedQuery(name = "Funcionario.findByIdFuncionario", query = "SELECT f FROM Funcionario f WHERE f.idFuncionario = :idFuncionario"),
    @NamedQuery(name = "Funcionario.findByNome", query = "SELECT f FROM Funcionario f WHERE f.nome = :nome"),
    @NamedQuery(name = "Funcionario.findByDataNasc", query = "SELECT f FROM Funcionario f WHERE f.dataNasc = :dataNasc"),
    @NamedQuery(name = "Funcionario.findByEstadoCivil", query = "SELECT f FROM Funcionario f WHERE f.estadoCivil = :estadoCivil"),
    @NamedQuery(name = "Funcionario.findByMorada", query = "SELECT f FROM Funcionario f WHERE f.morada = :morada"),
    @NamedQuery(name = "Funcionario.findByCodFunc", query = "SELECT f FROM Funcionario f WHERE f.codFunc = :codFunc"),
    @NamedQuery(name = "Funcionario.findByFoto", query = "SELECT f FROM Funcionario f WHERE f.foto = :foto"),
    @NamedQuery(name = "Funcionario.findByNumSS", query = "SELECT f FROM Funcionario f WHERE f.numSS = :numSS"),
    @NamedQuery(name = "Funcionario.findByTitulo", query = "SELECT f FROM Funcionario f WHERE f.titulo = :titulo")})
public class Funcionario implements Serializable {
    @Basic(optional = false)
    @NotNull
    @Column(name = "dataNasc")
    @Temporal(TemporalType.DATE)
    private Date dataNasc;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idFuncionario")
    private Integer idFuncionario;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 150)
    @Column(name = "nome")
    private String nome;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "estadoCivil")
    private String estadoCivil;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 200)
    @Column(name = "morada")
    private String morada;
    @Size(max = 20)
    @Column(name = "codFunc")
    private String codFunc;
    @Size(max = 300)
    @Column(name = "foto")
    private String foto;
    @Size(max = 45)
    @Column(name = "numSS")
    private String numSS;
    @Size(max = 45)
    @Column(name = "titulo")
    private String titulo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkFuncionario")
    private List<Contrato> contratoList;
    @OneToMany(mappedBy = "fkFuncionario")
    private List<Contacto> contactoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkFuncionario")
    private List<Compra> compraList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "funcionario")
    private List<QualificacoesFuncionario> qualificacoesFuncionarioList;
    @OneToMany(mappedBy = "fkFuncionario")
    private List<Usuario> usuarioList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "funcionario")
    private List<HabilidadeFuncionario> habilidadeFuncionarioList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkFuncionario")
    private List<Assiduidade> assiduidadeList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkFuncionario")
    private List<Encomenda> encomendaList;

    public Funcionario() {
    }

    public Funcionario(Integer idFuncionario) {
        this.idFuncionario = idFuncionario;
    }

    public Funcionario(Integer idFuncionario, String nome, Date dataNasc, String estadoCivil, String morada) {
        this.idFuncionario = idFuncionario;
        this.nome = nome;
        this.dataNasc = dataNasc;
        this.estadoCivil = estadoCivil;
        this.morada = morada;
    }

    public Integer getIdFuncionario() {
        return idFuncionario;
    }

    public void setIdFuncionario(Integer idFuncionario) {
        this.idFuncionario = idFuncionario;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getMorada() {
        return morada;
    }

    public void setMorada(String morada) {
        this.morada = morada;
    }

    public String getCodFunc() {
        return codFunc;
    }

    public void setCodFunc(String codFunc) {
        this.codFunc = codFunc;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public String getNumSS() {
        return numSS;
    }

    public void setNumSS(String numSS) {
        this.numSS = numSS;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    @XmlTransient
    public List<Contrato> getContratoList() {
        return contratoList;
    }

    public void setContratoList(List<Contrato> contratoList) {
        this.contratoList = contratoList;
    }

    @XmlTransient
    public List<Contacto> getContactoList() {
        return contactoList;
    }

    public void setContactoList(List<Contacto> contactoList) {
        this.contactoList = contactoList;
    }

    @XmlTransient
    public List<Compra> getCompraList() {
        return compraList;
    }

    public void setCompraList(List<Compra> compraList) {
        this.compraList = compraList;
    }

    @XmlTransient
    public List<QualificacoesFuncionario> getQualificacoesFuncionarioList() {
        return qualificacoesFuncionarioList;
    }

    public void setQualificacoesFuncionarioList(List<QualificacoesFuncionario> qualificacoesFuncionarioList) {
        this.qualificacoesFuncionarioList = qualificacoesFuncionarioList;
    }

    @XmlTransient
    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    @XmlTransient
    public List<HabilidadeFuncionario> getHabilidadeFuncionarioList() {
        return habilidadeFuncionarioList;
    }

    public void setHabilidadeFuncionarioList(List<HabilidadeFuncionario> habilidadeFuncionarioList) {
        this.habilidadeFuncionarioList = habilidadeFuncionarioList;
    }

    @XmlTransient
    public List<Assiduidade> getAssiduidadeList() {
        return assiduidadeList;
    }

    public void setAssiduidadeList(List<Assiduidade> assiduidadeList) {
        this.assiduidadeList = assiduidadeList;
    }

    @XmlTransient
    public List<Encomenda> getEncomendaList() {
        return encomendaList;
    }

    public void setEncomendaList(List<Encomenda> encomendaList) {
        this.encomendaList = encomendaList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idFuncionario != null ? idFuncionario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Funcionario)) {
            return false;
        }
        Funcionario other = (Funcionario) object;
        if ((this.idFuncionario == null && other.idFuncionario != null) || (this.idFuncionario != null && !this.idFuncionario.equals(other.idFuncionario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidades.Funcionario[ idFuncionario=" + idFuncionario + " ]";
    }

    public Date getDataNasc() {
        return dataNasc;
    }

    public void setDataNasc(Date dataNasc) {
        this.dataNasc = dataNasc;
    }
    
}
